package desmontec.documentos

import org.hibernate.validator.AssertFalse;

import grails.test.*;
import desmontec.funcionarios.*;


class MapaEstocagemTests extends GrailsUnitTestCase {

	def mapaEstocagem = new MapaEstocagem()
	

	protected void setUp() {
		super.setUp()
		mockForConstraintsTests(MapaEstocagem, [mapaEstocagem])
		
	}

	protected void tearDown() {
		super.tearDown()
	}

	/**
	 * Testa se os campos de um mapa de estocagem podem ser nulos
	 */
	void testMapaParametrosNull() {

		def mapa1 = new MapaEstocagem(numeroDoCertificado:null, competencia:null);

		assertFalse (mapa1.validate())
		assertEquals "nullable", mapa1.errors["numeroDoCertificado"]
		assertEquals "nullable", mapa1.errors["competencia"]
	}

	void testMapaCompetenciaAntesdoPrazo(){

		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		Date inicioPrazo = GregorianCalendar.getInstance().getTime();
		Date fimPrazo = GregorianCalendar.getInstance().getTime().next();

		def dpg1 = new DPG(numero:1234, beneficiario:"DPG Correta", responsavel:engenheiro,
				inicioDoPrazoValidade:inicioPrazo, fimDoPrazoValidade:fimPrazo )

		def mapa1 = new MapaEstocagem(numeroDoCertificado:1234,
				competencia:GregorianCalendar.getInstance().getTime().previous(), dpg: dpg1);

		assertFalse(mapa1.validate())
		assertEquals "validator", mapa1.errors["competencia"]
	}


	void testMapaCompetenciaDepoisdoPrazo(){

		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		Date inicioPrazo = GregorianCalendar.getInstance().getTime().previous();
		Date fimPrazo = GregorianCalendar.getInstance().getTime();

		def dpg1 = new DPG(numero:1234, beneficiario:"DPG Correta", responsavel:engenheiro,
				inicioDoPrazoValidade:inicioPrazo, fimDoPrazoValidade:fimPrazo )

		def mapa1 = new MapaEstocagem(numeroDoCertificado:1234,
				competencia:GregorianCalendar.getInstance().getTime().next(), dpg: dpg1);

		assertFalse(mapa1.validate())
		assertEquals "validator", mapa1.errors["competencia"]
	}

	/**
	 * Testa se dois mapas de uma mesma dpg podem ter mesma competencia
	 */
	void testMapasCompetenciaUnicaPorMes(){

		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		Date inicioPrazo = GregorianCalendar.getInstance().getTime();
		Date fimPrazo = GregorianCalendar.getInstance().getTime().previous();

		def dpg1 = new DPG(numero:1234, beneficiario:"DPG Correta", responsavel:engenheiro,
				inicioDoPrazoValidade:inicioPrazo, fimDoPrazoValidade:fimPrazo )

		def mapa1 = new MapaEstocagem(numeroDoCertificado:1234,
				competencia:GregorianCalendar.getInstance().getTime(), dpg: dpg1);


		mockForConstraintsTests(MapaEstocagem, [mapa1]);
		def mapa2 = new MapaEstocagem(numeroDoCertificado:1234,
				competencia:GregorianCalendar.getInstance().getTime(), dpg: dpg1);

		assertFalse(mapa2.validate())
		assertEquals "validator", mapa2.errors["competencia"]
	}

}
